package py.ucom.sistemas.web.entradaspy.db.consultas;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import py.ucom.sistemas.web.entradaspy.db.Conexion;
import py.ucom.sistemas.web.entradaspy.db.componenentes.Ciudad;
import py.ucom.sistemas.web.entradaspy.db.componenentes.Evento;
import py.ucom.sistemas.web.entradaspy.db.componenentes.Lugar;
import py.ucom.sistemas.web.entradaspy.db.componenentes.Moneda;
import py.ucom.sistemas.web.entradaspy.db.componenentes.Pais;
import py.ucom.sistemas.web.entradaspy.db.componenentes.TipoEvento;
import py.ucom.sistemas.web.entradaspy.db.componenentes.Usuario;
import py.ucom.sistemas.web.entradaspy.db.componenentes.ticket;


public class ConsultaDB {
	private Connection conn;
	private Statement stm;
	private Conexion conexionConfig;
	private String queryGetEventosOrder = "select id_lugar,nombre,descripcion,link from evento order by orden";
	private String queryGetPais = "select * from pais";
	private String queryGetCiudad = "select * from ciudad";
	private String queryGetTipoEvento = "select * from tipo_evento where descripcion like";
	private String queryGetListTipoEvento = "select * from tipo_evento";
	private String queryGetLugares = "select * from lugar";
	private String queryExisteUsuario = "select id_usuario,email,nombre,apellido from usuario where email=";
	private String queryInsertUser = "insert into usuario (id_tipo_usuario,nombre,apellido,email,password,direccion) values (2";
	private String queryGetEvento = "select * from evento where nombre like ";
	private String queryGetLugar = "select * from lugar where id_lugar=";
	private String queryGetId_lugar = "select id_lugar from lugar where nombre like";
	private String queryInsertEventoNuevo = "insert into evento (id_lugar,id_tipo_evento,nombre,descripcion,orden,imagen1) values (";
	private String queryInsertTicket = "insert into ticket(id_evento,descripcion,fecha_realizacion,hora,precio,cantidad_Disponible,cantidad_minima,orden,imagen1) values (";
	private String queryGetListTickets = "select * from Ticket where id_evento =";
	private String selectCantEntradasDisponibles = "select cantidad_disponible from ticket where id_evento =";
	private ArrayList<Evento> listEventos;
	private ArrayList<Moneda> listMonedas;
	private ArrayList<Ciudad> listCiudad;
	private ArrayList<Pais> listPais;
	private ArrayList<TipoEvento> listTipoEventos;
	private ArrayList<Lugar> listLugar;
	private ArrayList<ticket> listTickets;
	public ConsultaDB() {
		listCiudad = new ArrayList<Ciudad>();
		listPais = new ArrayList<Pais>();
		listEventos = new ArrayList<Evento>();
		listTipoEventos = new ArrayList<TipoEvento>();
		listLugar = new ArrayList<Lugar>();
		listTickets = new ArrayList<ticket>();
		try{
			System.out.println("skdhadhsajdhasjdhaskdhasjdkasjhdksahdsakdhaskdhk");
			this.conexionConfig = new Conexion();
			conn = conexionConfig.getConnection();
		}catch (Exception e) {
			System.out.println(e.getLocalizedMessage());
		}
		this.conn = conexionConfig.getConnection();
		try {
			this.stm = conn.createStatement();
		} catch (SQLException e) {
			System.out.println(e.getMessage());
		}
	}
	
	public ArrayList<Evento> getEventos(){
		try {
			String s = queryGetEventosOrder;
			ResultSet rs = stm.executeQuery(queryGetEventosOrder);
			while(rs.next()){
				Evento evento = new Evento();
				evento.id_lugar= rs.getInt("id_lugar");
				evento.nombre = rs.getString("nombre");
				evento.descripcion = rs.getString("descripcion");
				evento.link = rs.getString("link");
				listEventos.add(evento);
				System.out.println(evento.descripcion);
			}
		} catch (SQLException e) {
			
			System.out.println(e.getMessage());
		}
		return listEventos;
	}
	
	public ArrayList<Pais> getPais(){
		try {
			ResultSet rs = stm.executeQuery(queryGetPais);
			
			while(rs.next()){
				Pais pais = new Pais();
				pais.nombre = rs.getString("nombre");
				pais .id_pais= rs.getInt("id_pais");
				listPais.add(pais);
			}
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		return listPais;
	}
	
	
	public ArrayList<Ciudad> getCiudad(){
		try {
			ResultSet rs = stm.executeQuery(queryGetCiudad);
			
			while(rs.next()){
				Ciudad ciudad = new Ciudad();
				ciudad.nombre = rs.getString("nombre");
				ciudad.id_ciudad = rs.getInt("id_ciudad");
				listCiudad.add(ciudad);
			}
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		return listCiudad;
	}
	public Boolean addUser(Usuario u){
		
		try {
			stm = conn.createStatement();
			int rs = stm.executeUpdate(queryInsertUser+",'"+u.getNombre()+"','"+u.getApellido()+"','"+u.getEmail()+"','"+u.getPassword()+"','"+u.getDireccion()+"')");

		} catch (SQLException e) {
			System.out.println(e.getMessage());
		}
		return true;
	}
	

	public Usuario checkUser(String email){
		try {
			Statement stm = conn.createStatement();
			ResultSet rs = stm.executeQuery(queryExisteUsuario + "'"+ email+"'");
			if (rs != null) {
				Usuario u=new Usuario();
				while(rs.next()){
					
					u.id_usuario=rs.getInt("id_usuario");
					u.nombre=rs.getString("nombre");
					u.apellido=rs.getString("apellido");
					
					
				}
				return u;
			}
		} catch (SQLException e) {

			System.out.println(e.getMessage());
		}
		return null;
	}

	public Evento getEvento(String eventoString){
		Evento evento = new Evento();
		try {
			String s = queryGetEvento + "'%"+eventoString+"%'";
			ResultSet rs = stm.executeQuery(queryGetEvento + "'%"+eventoString+"%'");
			while(rs.next()){
				evento.nombre = rs.getString("nombre");
				evento.descripcion = rs.getString("descripcion");
				evento.fecha_inicio_evento = rs.getString("fecha_inicio_evento");
				evento.link = rs.getString("link");
				evento.id_lugar = rs.getInt("id_lugar");
				evento.imagen1 = rs.getString("imagen1");
				evento.id_evento= rs.getInt("id_evento");
				//System.out.println(evento.descripcion);
			}
		} catch (SQLException e) {
			
			System.out.println(e.getMessage());
		}
		return evento;
	}
	public Lugar getLugar (int id_lugar){
		Lugar lugar=new Lugar();
		try {
			ResultSet rs = stm.executeQuery(queryGetLugar +id_lugar);
			String s=queryGetLugar +id_lugar;
			while(rs.next()){
				lugar.nombre = rs.getString("nombre");
				lugar.direccion = rs.getString("direccion");
				lugar.id_lugar = rs.getInt("id_lugar");
				
			}
		} catch (SQLException e) {
			
			System.out.println(e.getMessage());
		}
		return lugar;
	}

	public ArrayList<TipoEvento> getTipoEventos(){
		try {
			String s = queryGetTipoEvento;
			ResultSet rs = stm.executeQuery(queryGetListTipoEvento);
			while(rs.next()){
				TipoEvento tipoevento = new TipoEvento();
				tipoevento.id_tipo_evento = rs.getInt("id_tipo_evento");
				tipoevento.descripcion = rs.getString("descripcion");
				listTipoEventos.add(tipoevento);
				System.out.println(tipoevento.descripcion);
			}
		} catch (SQLException e) {
			
			System.out.println(e.getMessage());
		}
		return listTipoEventos;
	}
	public ArrayList<Lugar> getLugar(){
		try {
			String s = queryGetLugar;
			ResultSet rs = stm.executeQuery(queryGetLugares);
			while(rs.next()){
				Lugar lugar = new Lugar();
				lugar.nombre = rs.getString("nombre");
				lugar.direccion = rs.getString("direccion");
				lugar.id_lugar = rs.getInt("id_lugar");
				listLugar.add(lugar);
				System.out.println(lugar.nombre);
			}
		} catch (SQLException e) {
			
			System.out.println(e.getMessage());
		}
		return listLugar;
	}
	
	
	
	
	public TipoEvento getIdTipoEvento(String tipoEvento){
		TipoEvento tipoevento=new TipoEvento();
		try {
			ResultSet rs = stm.executeQuery(queryGetTipoEvento  + "'%"+tipoEvento+"%'");
			String s=queryGetLugar;
			while(rs.next()){
				tipoevento.id_tipo_evento = rs.getInt("id_tipo_evento");
				tipoevento.descripcion = rs.getString("descripcion");
				System.out.println(tipoevento.descripcion);
			}
		} catch (SQLException e) {
			
			System.out.println(e.getMessage());
		}
		return tipoevento;
	}	
	
	public ArrayList<Lugar> getLugares(){
		Lugar lugares=new Lugar();
		try {
			ResultSet rs = stm.executeQuery(queryGetLugares);
			String s=queryGetLugar;
			while(rs.next()){
				Lugar lugar = new Lugar();
				lugar.nombre =rs.getString("nombre");
				listLugar.add(lugar);
				
				System.out.println(lugares.nombre);
			}
		} catch (SQLException e) {
			
			System.out.println(e.getMessage());
		}
		return listLugar;
	}
	
	public int getId_lugar(String lugarString){
		Lugar lugar=new Lugar();
		try {
			ResultSet rs = stm.executeQuery(queryGetId_lugar + "'%"+lugarString+"%'");
			String s=queryGetLugar;
			while(rs.next()){
				lugar.id_lugar =rs.getInt("id_lugar");
				System.out.println(lugar.id_lugar);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return lugar.id_lugar;
	}
	//public Boolean NuevoEvento(int id_lugar,int id_tipo_evento,String nombre,String descripcion,Date fecha_inicio_evento,Date fecha_fin_evento,Date fecha_inicio_venta,Date fecha_fin_venta,int orden){
	public Boolean NuevoEvento(Evento evento){
		//Evento evento=new Evento();
		try {
			
			String imagen = "images/"+evento.imagen1;
			int rs = stm.executeUpdate(queryInsertEventoNuevo +evento.id_lugar+",'"+evento.id_tipo_evento+"','"+evento.nombre+"','"+evento.descripcion+"',"+evento.orden+",'"+imagen+"')"); 
//			while(rs.next()){
//				evento.id_lugar =rs.getInt("id_lugar");
//				evento.id_tipo_evento =rs.getInt("id_tipo_evento");
//				evento.nombre=rs.getString("nombre");
//				evento.descripcion=rs.getString("descripcion");
//				evento.fecha_inicio_evento=rs.getDate("fecha_inicio_evento");
//				evento.fecha_fin_evento=rs.getDate("fecha_fin_evento");
//				evento.fecha_inicio_venta=rs.getDate("fecha_inicio_venta");
//				evento.fecha_fin_venta=rs.getDate("fecha_fin_venta");
//				evento.orden =rs.getInt("orden");
//			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		return true;
	}
	
	public boolean insertDataCarrito(int da){
		
		return true;
	}
	
public boolean insertDataTicket(ticket entrada){
	ticket ticket= new ticket();
	try {
		String s = queryInsertTicket +entrada.id_evento+"'"+entrada.descripcion+"'," + "'"+entrada.fecha_realizacion+"'," + "'"+entrada.horas+"',"+"'"+entrada.precio+"',"+entrada.cantidad_disponible+","+entrada.cantidad_minima+","+entrada.orden+",'"+entrada.imagen1+"')";
		String imagen = "images/"+entrada.imagen1;
		
		
		int rs = stm.executeUpdate(queryInsertTicket +entrada.id_evento+",'"+entrada.descripcion+"'," + "'"+entrada.fecha_realizacion+"'," + "'"+entrada.horas+"',"+"'"+entrada.precio+"',"+entrada.cantidad_disponible+","+entrada.cantidad_minima+","+entrada.orden+",'"+imagen+"')");
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		System.out.println(e.getMessage());
	}
		return true;
	}
public ArrayList<ticket> getListTickets(String nombreEvento){
	Evento evento=getEvento(nombreEvento);
	try {
	ResultSet rs = stm.executeQuery(queryGetListTickets + ""+evento.id_evento);
	while(rs.next()){
	ticket entrada = new ticket();
	entrada.descripcion = rs.getString("descripcion");
	entrada.precio = rs.getInt("precio");
	System.out.println(entrada.descripcion);
	listTickets.add(entrada);
	}
	} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
	}
	return listTickets;
	}

//public boolean insertCarritoEnDatabase(String descripcionEvento,String descripcionTicket,int cantidadEntradas){
//	Evento evento=this.getEvento(descripcionEvento);
//	int cantidadDisponible=0;
//	String s=selectCantEntradasDisponibles + ""+evento.id_evento+" and descripcion like" + "'%"+descripcionTicket+"'";
//	try {
//		ResultSet rs = stm.executeQuery(selectCantEntradasDisponibles + ""+evento.id_evento+" and descripcion like" + "'%"+descripcionTicket+"'");
//		while(rs.next()){
//			cantidadDisponible =rs.getInt("cantidad_disponible");
//			System.out.println(cantidadDisponible);
//		}
//	} catch (SQLException e) {
//		// TODO Auto-generated catch block
//		e.printStackTrace();
//	}
//	
//	if(cantidadEntradas>cantidadDisponible){
//		System.out.println("sory loco anda busca con los revendedores");
//		return false;
//	}
//	return true;
//}

public boolean insertCarritoEnDatabase(Evento evento,String descripcionTicket,int cantidadEntradas){
	Evento newevento=this.getEvento(evento.nombre);
	int cantidadDisponible=0;
	System.out.println(descripcionTicket);
	
	String s=selectCantEntradasDisponibles + ""+newevento.id_evento+" and descripcion like" + "'%"+descripcionTicket+"%'";
	try {
		ResultSet rs = stm.executeQuery(selectCantEntradasDisponibles + ""+newevento.id_evento+" and descripcion like" + "'%"+descripcionTicket+"%'");
		while(rs.next()){
			cantidadDisponible =rs.getInt("cantidad_disponible");
			System.out.println(cantidadDisponible);
		}
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
	if(cantidadEntradas>cantidadDisponible){
		System.out.println("sory loco anda busca con los revendedores");
		return false;
	}
	String insertIntoCarrito="update ticket set cantidad_disponible=";
	int actual=cantidadDisponible-cantidadEntradas;
	try {
		String sa= insertIntoCarrito + ""+actual+ " where id_evento= "+evento.id_evento+" and descripcion like "+"'%"+descripcionTicket+"'";
		int rs = stm.executeUpdate(insertIntoCarrito + ""+actual+ " where id_evento= "+evento.id_evento+" and descripcion like "+"'%"+descripcionTicket+"'");
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return true;
}


	public static void main(String[] args) {
		ConsultaDB c= new ConsultaDB();
		//c.NuevoEvento0,2,"Los Verduleros","venden todo tipo de verduras y frutas",'2008-05-05','2008-05-05','2008-05-05','2008-05-05',5);
		//c.NuevoEvento(0,2,"Los Verdulerooooooooo","venden todo tipo de verduras",2);
		//c.insertCarritoEnDatabase("Los cachululos", "los chetos",5);
		c.getListTickets("Los cachululos");
	}	
}
